home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / utils / mktable.script < prev    next >
Text File  |  1996-07-24  |  2KB  |  91 lines

  1. #!/usr/local/bin/perl
  2. # mktable - generate:
  3. #   1. struct     <def-file>_type
  4. #   2. table      <def-file>_table
  5. #   3. table size <def-file>_size
  6. #   3. enum-list  <def-file>_enum, enumerator from given names
  7. #   from one definition file
  8. #
  9. # definition file:
  10. #   ^# hashes are allowed as comments in begining of line
  11. #   ^# first line declares type-member pairs separated by slash
  12. #   ^# typenames have to be in one part eg. "struct type" don't
  13. #   ^# work, typedef these instead. 
  14. #   ^      type1/member1 type2/memeber2
  15. #   ^
  16. #   ^# in data lines, exist first name of row and then members
  17. #   ^# of struct in order. The name may not enclose in "'s althought
  18. #   ^# its type is char *.
  19. #   ^ name member1       member2  
  20. #   ^ name ...           ...
  21. #   ^ ...
  22. #
  23.  
  24. if( ! $ARGV[0] ) {
  25.     print "Usage: mktable definition-file\n";
  26.     exit(2);
  27. } else {
  28.     $def = $ARGV[0];
  29. }
  30.  
  31. open(DEF,$def) || die("Can't open ".$def);
  32. $line = 0;
  33. $elems = 0;
  34. %table;
  35.  
  36. print "/* should not be modified */\n\n";
  37. &loop;
  38.  
  39. sub loop {
  40.     while(<DEF>) {
  41.     chop;
  42.     next if /^$/;
  43.     next if /^[\t ]*#/;
  44.     $line++;
  45.     @tuple = split;
  46.     shift @tuple if $tuple[0] eq "";
  47.     if($line == 1) {
  48.         print "typedef struct {\n";
  49.         print "\tchar\t*key;\n";
  50.         foreach $field (@tuple) {
  51.         # print "\"$field\"\n";
  52.         last if $field eq "empty";
  53.         ($type,$mem) = split(/\//,$field);
  54.         print "\t$type\t$mem;\n";
  55.         }
  56.         print "} ".$def."_type;\n\n";
  57.     } else {
  58.         $elems++;
  59.         $key = shift(@tuple);
  60.         $val = join(":",@tuple);
  61.         $table{$key} = $val;
  62.     }
  63.     }
  64.     # size
  65.     print "#define\t".$def."_size\t$elems\n\n";
  66.     # table
  67.     print "/* sorted */\n";
  68.     print $def."_type ".$def."_table[] = {\n";
  69.     foreach $key (sort(keys(%table))) {
  70.     print "\t\"$key\",\t";
  71.     foreach $mem (split(/:/,$table{$key})) {
  72.         print "$mem,\t";
  73.     }
  74.     print "\n";
  75.     }
  76.     print "}; /* ".$def."_table */\n\n";
  77.     # enum
  78.     print "typedef enum {\n";
  79.     foreach $key (sort(keys(%table))) {
  80.     print "\tinput_".$key.",\n";
  81.     }
  82.     print "} "."$def"."_enum;\n\n";
  83. }
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.